package com.hksj.drcs.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hksj.drcs.dto.create.CreateScheduleTaskDTO;
import com.hksj.drcs.dto.delete.DeleteScheduleTaskDTO;
import com.hksj.drcs.dto.update.UpdateScheduleTaskDTO;
import com.hksj.drcs.dto.update.UpdateScheduleTaskStatusDTO;
import com.hksj.drcs.entity.ScheduleTask;
import com.hksj.drcs.query.RemoteControlDeviceQuery;
import com.hksj.drcs.query.ScheduleTaskQuery;
import com.hksj.drcs.vo.RemoteControlDeviceVO;
import com.hksj.drcs.vo.ScheduleTaskBaseInfoVO;
import com.hksj.drcs.vo.ScheduleTaskVO;

import java.util.List;

/**
 * @author zengke
 * @version 1.0
 * @see ScheduleTaskService
 * @since 2025/05/22 10:35
 */
public interface ScheduleTaskService extends IService<ScheduleTask> {

    /**
     * 创建定时任务
     * @param dto 创建定时任务数据传输对象
     * @return 是/否创建成功
     */
    String createScheduleTask(CreateScheduleTaskDTO dto);

    /**
     * 更新定时任务
     * @param dto 更新定时任务数据传输对象
     * @return 是/否更新成功
     */
    String updateScheduleTask(UpdateScheduleTaskDTO dto);

    /**
     * 更新定时任务状态
     * dto 更新定时任务状态数据传输对象
     * @return 是/否启用/禁用成功
     */
    String updateScheduleTaskStatus(UpdateScheduleTaskStatusDTO dto);

    /**
     * 删除定时任务
     * @param dto 删除定时任务数据传输对象
     * @return 是/否删除成功
     */
    String deleteScheduleTask(DeleteScheduleTaskDTO dto);

    /**
     * 动态查询定时任务列表
     * @param query 定时任务查询条件
     * @return 定时任务列表
     */
    List<ScheduleTaskVO> queryScheduleTaskList(ScheduleTaskQuery query);

    /**
     * 分页查询定时任务列表
     * @param query 定时任务查询条件
     * @return 分页结果
     */
    IPage<ScheduleTaskVO> queryScheduleTaskListByPaging(ScheduleTaskQuery query);

    /**
     * 根据定时任务id查询定时任务基础信息
     * @param id 定时任务id
     * @return 定时任务基础信息
     */
    ScheduleTaskBaseInfoVO queryScheduleTaskBaseInfo(String id);

    /**
     * 查询远程集中控制设备树
     * @param query 远程控制设备树查询条件
     * @return 远程控制设备树
     */
    List<RemoteControlDeviceVO> queryRemoteControlDeviceTree(RemoteControlDeviceQuery query);
}
